Keywords: GPS, wild boar, hunting, density heatmaps, animal speed
Wild Boar (Sus scrofa L.) populations have increased in size at a remarkable rate throughout their European range since the 1980s. In addition, the animals have migrated naturally into new areas or have been mistakenly reinstated by individuals escaping from farms (Macdonald, 2001). Besides causing ecological impacts in natural environments, expansion into territories where animals were not previously found can cause tremendous economic losses in agriculture and forestry (Pimentel et al., 2001). Fischer et al. (2004) stress that the damage increased dramatically since the 1990s. The wild boar, the fifth largest ungulate species in Europe, is an animal that has such a far-reaching influence on both natural and anthropogenic areas (Niethammer & Krapp, 1986). Relatively little is known about how hunting impacts the behavior of the wild boar, which is now regaining large parts of Europe (Thurfjell et al. 2009). Hiding and running away are the two main responses to disturbance by hunting of the wild boars (Sodeikat and Pohlmeyer 2003).
This paper intense to address the lack of understanding of how hunting affects the behaviour and the movement patterns of wild boar. Specifically the focus is to investigate the following research questions (RQ) and hypotheses (H).
The implemented analysis and code can be displayed by clicking the code button on the right side of the analysis. First, the available data is explored and investigated. Next step includes the description of the used methods in this paper. Afterwards, the results are presented and are further discussed in the last section. Also, the limititations are listed.
The wild boar data is provided by the ZHAW and is used for the course: Patterns and trends in environmental Data - Computational Movement Analysis.
Table 1 shows all the available different wild boar animals of the data set. It is possible to investigate the different variables interactively. Moreover, the GPS trajectories of all animals are available. In Table 2 a simple subset of the data is shown. A consitant sampling rate is not available.
Table 1: Wild boar metadata interactive searchable.
DT::datatable(wildschwein_metadata)Table 2: Available GPS trajectories and the given data structure.
# Include date information
wildschwein_BE <- wildschwein_BE %>%
mutate(month=month(wildschwein_BE$DatetimeUTC)) %>%
mutate(daymonth=day(wildschwein_BE$DatetimeUTC))
wildschwein_BE$month <- month.name[wildschwein_BE$month]
head(wildschwein_BE)## # A tibble: 6 x 10
## TierID TierName CollarID DatetimeUTC E N day
## <int> <chr> <int> <dttm> <dbl> <dbl> <chr>
## 1 1 Ueli 12272 2014-05-28 21:01:14.000000 2.57e6 1.20e6 Tag
## 2 1 Ueli 12272 2014-05-28 21:15:18.000000 2.57e6 1.20e6 Abenddaem…
## 3 1 Ueli 12272 2014-05-28 21:30:13.000000 2.57e6 1.20e6 Abenddaem…
## 4 1 Ueli 12272 2014-05-28 21:45:11.000000 2.57e6 1.20e6 Abenddaem…
## 5 1 Ueli 12272 2014-05-28 22:00:33.000000 2.57e6 1.20e6 1Nachtvie…
## 6 1 Ueli 12272 2014-05-28 22:15:16.000000 2.57e6 1.20e6 1Nachtvie…
## # … with 3 more variables: moonilumination <dbl>, month <chr>, daymonth <int>
For various reasons, not all animals were tracked over the entire time. In Figure 1 it is investigated for which months data is available per animal. This is cross-correlated with the hunting season to make sure that only animals with data from both periods, hunting and no hunting, is included in the study.
par(mfrow=c(1,2))
wildschwein_BE %>%
group_by(TierID) %>%
ggplot(aes(x=DatetimeUTC, y=TierName)) +
geom_line() +
theme_bw() + ylab("Wild Boar Name") + xlab("Timeline")
wildschwein_BE %>%
group_by(TierID) %>%
ggplot(aes(x=month(wildschwein_BE$DatetimeUTC), y=TierName)) +
geom_point() +
scale_x_continuous(breaks=seq(1,12,1))+
theme_bw() + ylab("Wild Boar Name") + xlab("Months")Figure 1: Left) Overview of all available GPS trajectories for each wild boar. Right) Overview of the available month by each boar.
Hunting season is roughly from August to January, with the main season from November to January (details see Section @ref(sec:HuntingSeason)). As such, we will include only animals where we have date covering the main hunting season as well as at least two month outside of the hunting season. As a result, we will use the data from:
Sabine, Miriam, and Caroline: covering January - December (12 months)
Amos: covering July to April (10 months)
Ruth: covering November until July (9 months)
Rosa: covering November until June (8 months)
With the exception of Amos, all of these animals are female. As a result, we will not have sufficient statistics to study potential differences in the behavior of male and female wild boar.
With the investigation of the temporal data availability and the discussed conditions in @ref(#sec:subsample) the subsample can be defined. Accordingly, the spatial and temporal distribution can be investigated to get an overview of the available data. Moreover, it is possible to interact with the leaflet application and to compare different months. It is observable that the wild boars move between Lake Neuchâtel and Lake Murten.
# Generate subsample
ws_final <- wildschwein_BE [wildschwein_BE$TierName %in% c("Sabine", "Miriam", "Caroline", "Amos", "Ruth", "Rosa"), ]
# Reproject data to use it for leaflet
ws_final_lv95 = st_as_sf(ws_final, coords = c("E", "N"), crs = 2056)
ws_final_wgs84 = st_transform(ws_final_lv95, 4326)
# We create an SF object to cast points to linestring
ws_final_wgs84 <- ws_final_wgs84 %>%
dplyr::group_by(TierName, month) %>%
dplyr::summarise() %>%
st_cast("LINESTRING")
# The SF object is splitted to a list by month
wildboar.df <- split(ws_final_wgs84, ws_final_wgs84$month)
# Generate color palette for leaflet
factpal <- colorFactor(topo.colors(6), ws_final_wgs84$TierName)
# Leaflet map with baseGroups to get an overview
boarMap <- leaflet() %>% addTiles()
names(wildboar.df) %>%
purrr::walk( function(df) {
boarMap <<- boarMap %>%
addPolylines(data = wildboar.df[[df]],
label=~as.character(TierName),
popup=~as.character(TierName),
group = df,
color = ~factpal(TierName),
fillOpacity = 1,
smoothFactor = 0.2
)
})
boarMap %>%
addLayersControl(
baseGroups = names(wildboar.df),
options = layersControlOptions(collapsed = FALSE)
)Different methods were explored to answer the RQs: seasonal density heatmaps to investigate the seasonal impact of the hunting season on the spatial distribution, calculate traveled distances by animal over time to examine the changes of habitats and analysis of speed distribution. Density heatmaps are used to answer RQ 1. Within spatial statistics, the visualization of data with their basic landmarks and geographic context is essential (Kahle and Wickham (2013)). With the density heatmaps seasonal differences can be investigated. Density heatmaps are made for each month and day phase. In order to answer the RQ 2 and 3 it is necessary to have the information about the different trip segments. Laube and Purves (2011) introduced one segmentation method. With static fixes as “those whose average Euclidean distance to other fixes inside a temporal window v is less than some threshold d,” the trajectories segmenting is done. However, this method is applied and considered that the data set consists of more than one animal.
The habitat of the wild boars lies within three different political districts and each district has its own hunting regulations. In Table 4 a meta-analysis of the different hunting regulations is shown. Hunting season will be marked as none, low, medium, or high, depending on month and time of day. The following table shows the exact details of these regulations together with details how this was modeled in this analysis. Noteworthy is that full moon is a key element of defining the hunting season and is further investigated in Section @ref(sec:#sec:moon).
| Month | Bern | Vaud | Fribourg | Indicator HS | time of day |
|---|---|---|---|---|---|
| Feb - July | - | potentially stalking | - | none | all |
| Aug | outside forest day only: Mon / Sat | stalking day only: Mon, Tue, Thu, Fri, Sat | - | low | day |
| Sep | Mon-Sat day only | all day only: Mon, Tue, Thu, Fri. Stalking: +Sat | Mon, Tue, Thu, Sat day only. First half only outside forest. No protected areas | medium | day |
| Oct | Mon, Wed, Sat day only | - | Mon-Sat, protected areas: 2nd half Mon, Tue, Thu, Sat. Day only | low | day |
| Nov | Mon, Wed, Sat day only, 2nd half: 10 days around full moon |
all day only: Mon, Tue, Thu, Fri, Sat | all areas day only: Mon-Thu, Sat | high | day around full moon: all |
| Dec | Mon, Wed, Sat day only, 10 days around full moon | all day only: Mon, Tue, Thu, Fri, Sat | all areas day only: Mon-Thu, Sat | high | day around full moon: all |
| Jan | Mon, Wed, Sat day only, 10 days around full moon | all day only: Mon, Tue, Thu, Fri, Sat | day only: Mon-Thu, Sat some limitations in protected areas |
high | day around full moon: all |
With the gathered information about hunting regulations the GPS trajectories are enriched with the information about the hunting exposure.
ws_final <- ws_final %>%
mutate(hunting = case_when( (month=="August" | month=="October") & day=="Tag" ~ "low",
month =="September" & day=="Tag" ~ "medium",
(month=="November" | month=="December" | month=="January") &
(day=="Tag" | moonilumination>0.75) ~ "high",
TRUE ~ "none"))From November to January hunting can be done in the nights 6 days before and 4 days after full moon. The data includes a information on moon illumination that can be used to determine when full moon occurs and select the relevant days.
A simple cut as used above on “moon illumination” is giving exactly the required 10 days around full moon. However, filtering the correct days in a somewhat automated way would require a much more sophisticated algrorithm (e.g. peak finder on distribution of “moon illumination” to determine full moon or pairing the data with a calender). The gain in precision was found to be smaller than the overall uncertainties and variations in this study and therefore decided that the simplified cut is sufficient.
Table 3: Full moon day for each month detected with moon illumination >0.75.
fullmoondays <- ws_final %>%
filter(moonilumination>0.75) %>%
group_by(month) %>%
summarise(fullmoonday=n_distinct(daymonth))
DT::datatable(fullmoondays)After the reprojection and transformation it is possible to apply the ggmap function. In Figure 2 the density heatmaps for each month including all GPS trajectories of all wild boars are shown.To answer H1.1 the density heatmaps are needed: with the density heatmaps it is possible to get information about the spatial and temporal distribution of the wild boar data for each month. Moreover, plotting each month allows to compare month during and before/after hunting season.
# Reproject data to use it for leaflet
ws_final_wgs84 <- st_transform(ws_final_lv95, 4326)
#'* Extract month for facet wrap *
ws_final_wgs84$day2 <- day(ymd(ws_final_wgs84$DatetimeUTC))
ws_final_wgs84$dayname <-format(ws_final_wgs84$DatetimeUTC, format="%m-%d")
ws_final_wgs84 <- ws_final_wgs84 %>% mutate(month = factor(month,
levels = c("January", "February", "March", "April",
"May", "June", "July", "August",
"September", "October", "November", "December"),
ordered = TRUE))
#'* With density maps the seasonal patterns can be detected. *
ws_final_wgs84 <- st_as_sf(ws_final_wgs84, coords = c("lon","lat"))
ws_final_wgs84 <- ws_final_wgs84 %>% tidyr::extract(geometry, c('lon', 'lat'), '\\((.*), (.*)\\)', convert = TRUE)
#'* Define boundingbox (region Neuenburg/Murten and load an stamen basemap*
sbbox <- make_bbox(lon = c(6.973915, 7.129238), lat = c(46.96355, 47.025072), f = .1)
wildRegion <- get_map(location = sbbox, color = "bw", source = "stamen")
wildRegion <- ggmap(wildRegion)
ws_final_wgs84 <- ws_final_wgs84[ -c(9) ]
#'* create density maps for each month*
wildRegion + ggplot2::stat_density2d(aes(x = lon, y = lat, fill = ..level..), data = ws_final_wgs84, alpha = 0.25, bins = 50, geom = "polygon") +
scale_fill_gradient(low = "black", high = "red") +
facet_wrap(~month, ncol = 3) +
theme_bw() +
theme(legend.position="none")Figure 2: Density heatmaps for each month including all GPS trajectories of all wild boars.
The density heatmaps for each day phase are on key method to answer H1.2: during the hunting season the diurnal (spatial, temporal and activity) rhythms differ before/after hunting season diurnal rhythms. With the density heatmaps the spatial and temporal distribution can be investigated. Plotting by day phase allows to compare the different day stages with each other.
#'* create density maps for day category*
wildRegion + stat_density2d(aes(x = lon, y = lat, fill = ..level..), alpha = 0.25, bins = 50, data = ws_final_wgs84, geom = "polygon") +
scale_fill_gradient(low = "black", high = "red") +
facet_wrap(~ day) +
theme_bw() +
theme(legend.position="none")Figure 3: Density heatmaps for each day phase including all GPS trajectories of all wild boars.
In order to answer RQ 2 the traveled distances by animal is investigated. The traveled distances give insights if hunting leads to higher speeds and higher covered distances due to animal fleeing. Accordingly, the GPS trajectories are enriched with the speed and traveled distance information. For the analysis the trip segments are calculated and
Figure 2 shows the speed and traveled distance distribution for all animals.
# Calculate distances between different steps with step width between 1 - 3 using both, lag and lead. Calculated than the mean of these distances and plot the result as histogram. Save only the distance and also include a marker if the segment is considered static or not.
# split animals into list of lists
ws_final_list = split(ws_final, ws_final$TierName)
rle_id <- function(vec){
x <- rle(vec)$lengths
as.factor(rep(seq_along(x), times=x))
}
# Add step mean as attribute
for (i in 1:length(ws_final_list)) {
ws_final_list[[i]] <- ws_final_list[[i]] %>%
mutate(
stepMean = rowMeans(
cbind(
sqrt((lag(E,3)-E)^2+(lag(E,3)-E)^2),
sqrt((lag(E,2)-E)^2+(lag(E,2)-E)^2),
sqrt((lag(E,1)-E)^2+(lag(E,1)-E)^2),
sqrt((E-lead(E,1))^2+(E-lead(E,1))^2),
sqrt((E-lead(E,2))^2+(E-lead(E,2))^2),
sqrt((E-lead(E,3))^2+(E-lead(E,3))^2)
)
)
)
ws_final_list[[i]] <- ws_final_list[[i]] %>%
mutate(
static = stepMean < mean(ws_final_list[[i]]$stepMean,na.rm = TRUE)
)
# Add segmentation
ws_final_list[[i]] <- ws_final_list[[i]] %>%
mutate(segment_id = rle_id(static))
# Drop all observation that have a too big time difference
ws_final_list[[i]] <- ws_final_list[[i]] %>%
group_by(segment_id) %>%
mutate(duration = as.integer(difftime(max(DatetimeUTC),min(DatetimeUTC),"mins"))) %>%
filter(duration < 20) %>%
ungroup()
}
#revert to single list
ws_final <- do.call(rbind, lapply(ws_final_list, data.frame))
# Calculating Speed per Animal
ws_final <- ws_final %>%
group_by(TierName) %>%
mutate(speed = stepMean/duration *3600/1000) # Speed in km/hIn order to get insights about the traveled distances the mean, sum and median traveled distances are calculated for each day phase. In Table 5 It is possible to sort the variables in ascending or descending order. Due to the lack of information about the definition of the day phase (e.g., specific times) the sum isn’t an useful indicator. With mean and median traveled distance it is possible to get insights about the overall distribution of the traveled distances by day phase. The mean and median traveled distances are significant higher than during the day. Only at dawn the values are even smaller than during the day.
Table 5: Day phases with mean, sum and median traveled distances.
ws_final <- ws_final %>% mutate(month = factor(month,
levels = c("January", "February", "March", "April",
"May", "June", "July", "August",
"September", "October", "November", "December"),
ordered = TRUE))
#'* Investigate traveled distance during the day categories *
ws_final_distance <- ws_final %>%
group_by(day) %>%
summarise(
mean_distance = mean(stepMean,na.rm=T),
sum_distance = sum(stepMean,na.rm=T),
median_distance = median(stepMean,na.rm=T)
)
DT::datatable(ws_final_distance)Mean traveled distances combined of all wild boars for each months and day phase are shown in Figure 4. The traveled distances give insights about high and low activity levels. These activities are also found in the literature. Thurfjell et al. (2014) state higher activities during the night and lower activites troughout the day.
#'* Investigate covered distance during the day categories *
wildDay <- ws_final %>%
group_by(month, daymonth, day) %>%
summarise(
mean_distance = mean(stepMean,na.rm=T)
)
ggplot(wildDay, aes(x = daymonth, y = mean_distance)) +
geom_line(aes(color = day, linetype = day)) +
scale_color_manual(values = c("dodgerblue", "cornflowerblue", "darkorchid", "mediumorchid" , "turquoise", "darkorange", "goldenrod", "brown")) +
facet_wrap(~ month) +
theme_bw() +
labs(x ="Days [d]", y = "Mean traveled distance [m]")Figure 4: Mean walking distance of all tracked wildboars for each month.
The variability during the day phases is more visible with the boxplot comparison. During the day the activity is low and increases during the different night stages. All blue and violet lines represent activities during the night. Noteworthy is the overall activity low during the mid of September. Highest activities are recorded during November and December.
ws_final %>%
ggplot( aes(x=day, y=stepMean, fill=day)) +
geom_boxplot() +
scale_fill_viridis(discrete = TRUE, alpha=0.6) +
theme_bw() +
theme(
legend.position="none",
plot.title = element_text(size=11)
) +
labs(x="Day phase", y="Median traveled distance [m]") + theme(axis.text.x = element_text(angle = 45, hjust = 1))# Calculate median per month and hunting season
ws_dist_month <- ws_final %>%
filter(!static) %>%
group_by(hunting, TierName, month) %>%
summarise(
mean_dist = mean(stepMean, na.rm=TRUE),
sum_dist = sum(stepMean, na.rm=TRUE),
median_dist = median(stepMean, na.rm=TRUE)
)
# Calculating median per hunting season
ws_dist_year <- ws_final %>%
filter(!static) %>%
group_by(hunting, TierName) %>%
summarise(
mean_dist = mean(stepMean, na.rm=TRUE),
median_dist = median(stepMean, na.rm=TRUE)
)
# Plot results
ws_dist_month %>%
ggplot(aes(month, median_dist)) +
geom_point(aes(color=hunting)) +
geom_hline(data=ws_dist_year, aes(yintercept=median_dist, color=hunting)) +
theme_bw() + labs(x="Month", y="Median traveled distance [m]") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
facet_wrap(~TierName) # Calculate median per month and hunting season
ws_speed_month <- ws_final %>%
filter(!static & speed < 60) %>%
group_by(hunting, TierName, month) %>%
summarise(
mean_speed = mean(speed, na.rm=TRUE),
max_speed = max(speed, na.rm=TRUE),
median_speed = median(speed, na.rm=TRUE)
)
# Calculating median per hunting season
ws_speed_year <- ws_final %>%
filter(!static & speed < 60) %>%
group_by(hunting, TierName) %>%
summarise(
mean_speed = mean(speed, na.rm=TRUE),
max_speed = max(speed, na.rm=TRUE),
median_speed = median(speed, na.rm=TRUE)
)
# Plot results: median
ws_speed_month %>%
ggplot(aes(month, median_speed)) +
geom_point(aes(color=hunting)) +
geom_hline(data=ws_speed_year, aes(yintercept=median_speed, color=hunting)) +
theme_bw() + labs(x="Month", y="Median speed [km/h]") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
facet_wrap(~TierName) The analyzed GPS trajectories in this paper have no consistent sampling rate. However, this rate is not perfectly suitable to analyze associations between hunting and moving patterns such as fleeing, speed variations or traveled distances. The information between two observations can only assumed. Moreover, the data coverage is rather low and the sample size with six animals is to small to get significant results. The investigation of the wild boar hunting season is difficult to assess due to the fact that the habitat of the wild boars lies within three different political districts. In other words three different hunting regulations have to be considered and therefore it is difficult to define the hunting season for this area. Furthermore Thurfjell et al. (2014) stress that the movement speed of wild boar is impacted by daylight, season, and weather. During the night and high temperatures higher movement speed is recorded and snow and precipitation lead to lower movement speed. This analysis didn’t included any weather information.
This paper intended to provide answers on the association between hunting season and spatial and temporal distribution of wild boars. Furthermore a research goal is to investigate the short or medium term effects related to hunting with focus on speed and traveled distances.
The main hunting season is detected and defined between November and January. It was necessary to have wild boar data during and before/after the hunting season. For this purpose the available GPS trajectories are investigated. An overview of all available trajectories for each boar and an overview of the available months by each boar is used to define the wild boar selection. After the data exploration 6 out of 19 animals are used for all further analysis in this paper.WIth the exception of Amos, all of these animals are female. As a results, it is not possible to have sufficient statistics to study potential differences in the behaviour of male and female wild boar. According to the leaflet application with the spatial and temporal distribution of the wild boar sample the home ranges are always similar and only different during April.
The first hypothesis of research question one can be investigated with the monthly density heatmaps. The hypothesis states that the wild boar activity (spatial and temporal distribution) is different during hunting season than before or after hunting season. With the defined hunting season (November - January) there is not spatial or temporal association possible. Rather it is a seasonal pattern visible. Early in the year the wild boars home range is always location near the shore. During spring the wild boars move further inland. In the later months of the year a shift in
Density Heatmaps
Traveled Distances
Diurnal
Fischer, C., Gourdin, H., & Obermann, M. (2004). Spatial behaviour of the wild boar in Geneva, Switzerland: testing methods and first results. Galemys, 16, 149-155.
Laube, P., & Purves, R. S. (2011). How fast is a cow? Cross‐scale analysis of movement data. Transactions in GIS, 15(3), 401-418.
Kahle, D. J., & Wickham, H. (2013). ggmap: spatial visualization with ggplot2. R J., 5(1), 144.
Macdonald, D. (2001). The new encyclopedia of mammals. Oxford: Oxford University Press.
Niethammer, J. & Krapp, F. (1986). Handbuch der Säugetiere Europas. Wiesbaden: Aula-Verlag.
Pimentel, D., McNair, S., Janecka, J., Wightman, J., Simmonds, C., O’Connell, C., Wong, E., Russel, L., Zern, J., Aquino, T. & Tsomondo, T. (2001). Economic and environmental threats of alien plant, animal, and microbe invasions. Agr. Ecosyst. Environ. 84: 1–20.
Sodeikat, G., & Pohlmeyer, K. (2003). Escape movements of family groups of wild boar Sus scrofa influenced by drive hunts in Lower Saxony, Germany. Wildlife Biology, 9(4), 43-49.
Thurfjell, H., Ball, J. P., Åhlén, P. A., Kornacher, P., Dettki, H., & Sjöberg, K. (2009). Habitat use and spatial patterns of wild boar Sus scrofa (L.): agricultural fields and edges. European journal of wildlife research, 55(5), 517-523.
Thurfjell, H., Spong, G., & Ericsson, G. (2014). Effects of weather, season, and daylight on female wild boar movement. Acta Theriologica, 59(3), 467-472.
Sources
Wildscheinprojekt am Neuenburger See: https://www.freiburger-nachrichten.ch/wildschweinprojekt-gezielte-massnahmen-am-neuenburgersee/
Hunting Season